home *** CD-ROM | disk | FTP | other *** search
- REM > EnhVIDCSrc
- REM
- REM Modified modes for NEC 3D
- REM
- REM (c) 1990 Andy Ling
- REM
- REM Address : 29 Manor Road
- REM Burgess Hill
- REM West Sussex
- REM RH15 ONW
-
- PROCInitialise
-
- DIM code% code_size, L% -1 : REM This sets L% to limit of assembly
-
- PROCAssemble
-
- IF save AND (optlo AND %100) OSCLI "SAVE ModesPC+ "+STR$~code%+"+"+STR$~P%: OSCLI "SETTYPE ModesPC+ FFA"
-
- END
-
- DEFPROCInitialise
- CLS
- save = TRUE :optlo = %1100 : opthi = %1110
-
- code_size = 4500 : REM Amount reserved for assembling code
-
- REM ##### Set up register names
- link = 14 : REM Link register for subroutine calls
- sp = 13 : REM Stack pointer
- ENDPROC
-
- DEFPROCAssemble
- FOR pass = optlo TO opthi STEP (opthi - optlo)
- IF optlo AND %100 P%=0:O%=code% ELSE P%=code%:O%=0
- [
- OPT pass
-
- ;#####
- ;# relocatable module header
- ;#####
- EQUD 0 ; Startcode
- EQUD 0 ; Initialisation code
- EQUD 0 ; Finalisation code
- EQUD service ; Service requests
- EQUD title ; Title string offset
- EQUD help ; Help string offset
- EQUD 0 ; Command table offset
-
- ;#####
- ;# Help and title strings
- ;#####
- .title
- EQUS "ModesPC+"
- EQUB 0
- ALIGN
- .help
- EQUS "Modified PC Modes for NEC 3D with VIDC Enhancer"+CHR$9+"1.00 ("+MID$(TIME$,5,11)+")"
- EQUS " (c) A. D. Ling"
- EQUB 0
- ALIGN
-
-
- ;#####
- ;# Finalisation code - Don't die if it's fatal
- ;#####
- .finalise
- CMP R10 ,# 1 ; check for fatal finalisation
- MOVNE PC ,link ; return if not fatal
- ADR R0 ,error
- ORRS PC ,link , #1<<28 ; set overflow flag
- .error
- EQUD &900
- EQUS "VIDC module refuses to die"
- EQUB 0
- ALIGN
-
-
- ;#####
- ;# Services OS_Module - Traps mode changes
- ;#####
- .service
- CMP R1 ,# &46 ; Mode change
- CMP R1 ,# &50 ; Service mode extension
- MOVNE PC ,link ; Return if not mode change
- CMN R3 ,#1 ; test for monitor type
- CMPNE R3 ,#1
- MOVNE PC ,link ; return if not multisync
- STMFD (sp)! ,{R5-R8,link}
- ADR R5 ,table
- MOV R8 ,#(table_end - table) >> 2
- MOV R6 ,# 0
- .loop
- LDR R7 ,[R5,R6,LSL #2]
- CMP R2 ,R7
- BEQ found
- ADD R6 ,R6,#3
- CMP R6 ,R8
- BLT loop
- LDMFD (sp)! ,{R5-R8,PC}
- .found
- MOV R1 ,# 0 ; claim mode change
- ADR R7 ,m0work_list
- ADD R6 ,R6,# 1
- LDR R3 ,[R5,R6,LSL #2]
- ADD R3 ,R3,R7
- ADD R6 ,R6,# 1
- LDR R4 ,[R5,R6,LSL #2]
- ADD R4 ,R4,R7
- LDMFD (sp)! ,{R5-R8,PC}
-
-
- ALIGN
-
- .table
- EQUD 41
- EQUD m41vidc_list - m0work_list
- EQUD m41work_list - m0work_list
-
- EQUD 42
- EQUD m42vidc_list - m0work_list
- EQUD m42work_list - m0work_list
-
- EQUD 43
- EQUD m43vidc_list - m0work_list
- EQUD m43work_list - m0work_list
-
- EQUD 44
- EQUD m44vidc_list - m0work_list
- EQUD m44work_list - m0work_list
-
- EQUD 45
- EQUD m45vidc_list - m0work_list
- EQUD m45work_list - m0work_list
-
- EQUD 46
- EQUD m46vidc_list - m0work_list
- EQUD m46work_list - m0work_list
-
- .table_end
-
-
- .m0work_list
-
- .m41vidc_list
- EQUD 0
- EQUD 25 ; Base MODE
- EQUD &805F0000
- EQUD &840B0000
- EQUD &880E8000
- EQUD &8C0C4000
- EQUD &905C4000
- EQUD &945E8000
- EQUD &A0704000
- EQUD &A4004000
- EQUD &A80D8000
- EQUD &AC0E0000
- EQUD &B0658000
- EQUD &B4660000
- EQUD &E0000003
- EQUD -1
-
- .m41work_list
- EQUD 0
- EQUD 25 ; Base MODE
- EQUD 0
- EQUD 0
- EQUD 1
- EQUD 79 ; No. columns - 1
- EQUD 2
- EQUD 42 ; No. rows - 1
- EQUD 4
- EQUD 1 ; X Eigen
- EQUD 5
- EQUD 1 ; Y Eigen
- EQUD 6
- EQUD 80 ; width in bytes
- EQUD 7
- EQUD &6D60 ; memory size (110K)
- EQUD 11
- EQUD 639 ; X pixels - 1
- EQUD 12
- EQUD 349 ; Y pixels - 1
- EQUD -1
-
- .m42vidc_list
- EQUD 0
- EQUD 26 ; Base MODE
- EQUD &805F0000
- EQUD &840B0000
- EQUD &880E8000
- EQUD &8C0D4000
- EQUD &905D4000
- EQUD &945E8000
- EQUD &A0704000
- EQUD &A4004000
- EQUD &A80D8000
- EQUD &AC0E0000
- EQUD &B0658000
- EQUD &B4660000
- EQUD &E0000007
- EQUD -1
-
- .m42work_list
- EQUD 0
- EQUD 26 ; Base MODE
- EQUD 0
- EQUD 0
- EQUD 1
- EQUD 79 ; No. columns - 1
- EQUD 2
- EQUD 42 ; No. rows - 1
- EQUD 4
- EQUD 1 ; X Eigen
- EQUD 5
- EQUD 1 ; Y Eigen
- EQUD 6
- EQUD 160 ; width in bytes
- EQUD 7
- EQUD &DAC0 ; memory size (110K)
- EQUD 11
- EQUD 639 ; X pixels - 1
- EQUD 12
- EQUD 349 ; Y pixels - 1
- EQUD -1
-
- .m43vidc_list
- EQUD 0
- EQUD 27 ; Base MODE
- EQUD &805F0000
- EQUD &840B0000
- EQUD &880E8000
- EQUD &8C0DC000
- EQUD &905DC000
- EQUD &945E8000
- EQUD &A0704000
- EQUD &A4004000
- EQUD &A80D8000
- EQUD &AC0E0000
- EQUD &B0658000
- EQUD &B4660000
- EQUD &E000000B
- EQUD -1
-
- .m43work_list
- EQUD 0
- EQUD 27 ; Base MODE
- EQUD 0
- EQUD 0
- EQUD 1
- EQUD 79 ; No. columns - 1
- EQUD 2
- EQUD 42 ; No. rows - 1
- EQUD 4
- EQUD 1 ; X Eigen
- EQUD 5
- EQUD 1 ; Y Eigen
- EQUD 6
- EQUD 320 ; width in bytes
- EQUD 7
- EQUD &1B580 ; memory size (110K)
- EQUD 11
- EQUD 639 ; X pixels - 1
- EQUD 12
- EQUD 349 ; Y pixels - 1
- EQUD -1
-
- .m43vidc_list
- EQUD 0
- EQUD 27 ; Base MODE
- EQUD &805F0000
- EQUD &840B0000
- EQUD &880E8000
- EQUD &8C0DC000
- EQUD &905DC000
- EQUD &945E8000
- EQUD &A0704000
- EQUD &A4004000
- EQUD &A807C000
- EQUD &AC084000
- EQUD &B05FC000
- EQUD &B4604000
- EQUD &E000000B
- EQUD -1
-
- .m43work_list
- EQUD 0
- EQUD 27 ; Base MODE
- EQUD 0
- EQUD 0
- EQUD 1
- EQUD 79 ; No. columns - 1
- EQUD 2
- EQUD 42 ; No. rows - 1
- EQUD 4
- EQUD 1 ; X Eigen
- EQUD 5
- EQUD 1 ; Y Eigen
- EQUD 6
- EQUD 320 ; width in bytes
- EQUD 7
- EQUD &1B580 ; memory size (110K)
- EQUD 11
- EQUD 639 ; X pixels - 1
- EQUD 12
- EQUD 349 ; Y pixels - 1
- EQUD -1
-
- .m44vidc_list
- EQUD 0
- EQUD 25 ; Base MODE
- EQUD &805F0000
- EQUD &840B0000
- EQUD &880D8000
- EQUD &8C0B4000
- EQUD &905B4000
- EQUD &945D8000
- EQUD &A0704000
- EQUD &A4004000
- EQUD &A81EC000
- EQUD &AC1F4000
- EQUD &B0514000
- EQUD &B451C000
- EQUD &E0000003
- EQUD -1
-
- .m44work_list
- EQUD 0
- EQUD 25 ; Base MODE
- EQUD 0
- EQUD 0
- EQUD 1
- EQUD 79 ; No. columns - 1
- EQUD 2
- EQUD 24 ; No. rows - 1
- EQUD 4
- EQUD 1 ; X Eigen
- EQUD 5
- EQUD 2 ; Y Eigen
- EQUD 6
- EQUD 80 ; width in bytes
- EQUD 7
- EQUD &3E80 ; memory size
- EQUD 11
- EQUD 639 ; X pixels - 1
- EQUD 12
- EQUD 199 ; Y pixels - 1
- EQUD -1
-
- .m45vidc_list
- EQUD 0
- EQUD 26 ; Base MODE
- EQUD &805F0000
- EQUD &840B0000
- EQUD &880D8000
- EQUD &8C0C4000
- EQUD &905C4000
- EQUD &945D8000
- EQUD &A0704000
- EQUD &A4004000
- EQUD &A81EC000
- EQUD &AC1F4000
- EQUD &B0514000
- EQUD &B451C000
- EQUD &E0000006
- EQUD -1
-
- .m45work_list
- EQUD 0
- EQUD 26 ; Base MODE
- EQUD 0
- EQUD 0
- EQUD 1
- EQUD 79 ; No. columns - 1
- EQUD 2
- EQUD 24 ; No. rows - 1
- EQUD 4
- EQUD 1 ; X Eigen
- EQUD 5
- EQUD 2 ; Y Eigen
- EQUD 6
- EQUD 160 ; width in bytes
- EQUD 7
- EQUD &7D00 ; memory size
- EQUD 11
- EQUD 639 ; X pixels - 1
- EQUD 12
- EQUD 199 ; Y pixels - 1
- EQUD -1
-
- .m46vidc_list
- EQUD 0
- EQUD 27 ; Base MODE
- EQUD &805F0000
- EQUD &840B0000
- EQUD &880D8000
- EQUD &8C0CC000
- EQUD &905CC000
- EQUD &945D8000
- EQUD &A0704000
- EQUD &A4004000
- EQUD &A81EC000
- EQUD &AC1F4000
- EQUD &B0514000
- EQUD &B451C000
- EQUD &E000000B
- EQUD -1
-
- .m46work_list
- EQUD 0
- EQUD 27 ; Base MODE
- EQUD 0
- EQUD 0
- EQUD 1
- EQUD 79 ; No. columns - 1
- EQUD 2
- EQUD 24 ; No. rows - 1
- EQUD 4
- EQUD 1 ; X Eigen
- EQUD 5
- EQUD 2 ; Y Eigen
- EQUD 6
- EQUD 320 ; width in bytes
- EQUD 7
- EQUD &FA00 ; memory size
- EQUD 11
- EQUD 639 ; X pixels - 1
- EQUD 12
- EQUD 199 ; Y pixels - 1
- EQUD -1
-
- ]
- NEXT pass
- ENDPROC
-